//
//  YWInspectionMissionDBManager.h
//  maintain
//
//  Created by Kyo on 16/8/31.
//  Copyright © 2016年 ewin. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "YWSingleton.h"

@class FMResultSet;
@class FMDatabase;

@class YWInspectionMissionModel;
@class YWInspectionLineModel;
@class YWInspectionLineRecord;
@class YWInspectionEquipmentRecord;

@interface YWInspectionMissionDBManager : NSObject
YWSingletonH(Manager)

/**
 *  创建巡查的数据库表
 *
 *  @return 结果
 */
- (void)createAllInspectionTables;
/**
 *  更新巡查的部分数据库表
 *
 *  @return 结果
 */
- (void)dropAndReCreateInspectionTables;
/**
 *  重建巡查任务表
 *
 *  @return 结果
 */
- (void)dropAndReCreateInspectionMissionTable;
/**
 *  重建巡查路线表
 *
 *  @return 结果
 */
- (void)dropAndReCreateInspectionLineTable;
/**
 *  添加或者删除字段
 *
 *  @return 结果
 */
- (void)dropAndReCreateInspectionlineRecordTable;

/**
*  保存巡查任务
*
*  @return 结果
*/
- (BOOL)saveInspectionMissionWithArray:(NSArray*)inspectionMission;
/**
 *  所有巡查任务ID（逗号隔开）
 *
 *  @return 结果
 */
- (NSString*)allInspectionMissionIds;
/**
 *  更新巡查任务为删除状态
 *
 *  @return 结果
 */
- (BOOL)updateInspectionMissionDeleteStatusWithMissionId:(NSInteger)inspectionMissionId;
/**
 *  更新巡查线路(单个路线模型)
 *
 *  @return 结果
 */
- (BOOL)updateInspectionLine:(YWInspectionLineModel*)inspectionLine;
/**
 *  更新巡查线路(模型数组)
 *
 *  @return 结果
 */
- (BOOL)updateInspectionLineWithArray:(NSArray*)inspectionLineArray;
/**
 *  获取所有巡查任务
 *
 *  @return 结果
 */
- (NSArray *)allInspectionMissions;
/**
 *  按页数获取巡查任务
 *
 *  @param keepWatchMission 巡查任务模型数组
 */
- (NSArray *)inspectionMissionsWithPage:(NSInteger)page;
/**
 *  获取所有执行人是我的巡查任务
 *
 *  @return 结果
 */
- (NSArray *)myInspectionMissions;
/**
 *  获取所有巡查路线
 *
 *  @param keepWatchMission 巡查路线模型数组
 */
- (NSArray *)allInspectionLines;
/**
 *  根据任务id获取巡查任务
 *
 *  @return 结果
 */
- (YWInspectionMissionModel *)inspectionMissionWithMissionId:(NSInteger)missionId;

- (YWInspectionMissionModel*)inspectionMissionWithFMResultSet:(FMResultSet*)set FMDatabase:(FMDatabase*)db;
/**
 *  获取巡查路线记录
 *
 *  @param uniqueTag uniqueTag
 *
 *  @return 记录模型数组
 */
- (YWInspectionLineRecord*)inspectionLineRecordWithUniqueTag:(NSString*)uniqueTag;

- (YWInspectionLineRecord*)inspectionLineRecordWithFMResultSet:(FMResultSet*)set FMDatabase:(FMDatabase*)db;
/**
 *  巡查路线对象
 *
 *  @param patrolLineId 巡查路线id
 *
 *  @return 巡查路线对象
 */
- (YWInspectionLineModel *)inspectionLineWithLineId:(NSInteger)inspectionLineId;
/**
 *  获取巡查路线记录
 *
 *  @param inspectionMission 巡查任务
 *  @param page 页数
 *
 *  @return 记录模型数组
 */
- (NSArray*)inspectionLineRecordWithInspectionMission:(YWInspectionMissionModel*)inspectionMission page:(NSInteger)page;
/**
 *  获取巡查路线记录
 *
 *  @param page 页数
 *
 *  @return 记录模型数组
 */
- (NSArray*)inspectionLineRecordWithPage:(NSInteger)page;
/**
 *  更新记录已读状态
 *
 *  @return 无
 */
- (BOOL)updateReadStatusWithInspectionMissionId:(NSInteger)inspectionMissionId;

/**
 *  巡查点记录
 *
 *  @param uniqueTag 巡查路线记录标识
 *
 *  @return 记录模型数组
 */
- (NSArray*)inspectionEquipmentRecordWithUniqueTag:(NSString*)uniqueTag;

- (YWInspectionEquipmentRecord*)inspectionEquipmentRecordWithFMResultSet:(FMResultSet*)set FMDatabase:(FMDatabase*)db;
/**
 *  巡更点记录完成数量
 *
 *  @param uniqueTag 巡更路线记录标识
 *
 *  @return 记录模型数组
 */
- (NSInteger)countOfInspectionEquipmentRecordWithUniqueTag:(NSString*)uniqueTag;
/**
 *  设备是否有巡查记录
 *
 *  @param uniqueTag 巡查路线记录标识
 *
 *  @return 记录模型数组
 */
- (BOOL)isExistRecordWithUniqueTag:(NSString *)uniqueTag equipmentId:(NSString*)equipmentId;
/**
 *  线路是否有设备
 *
 *  @param inspectionLineId 巡查路线Id
 *
 *  @return 结果
 */
- (BOOL)isExistEquipmentWithLineId:(NSInteger)inspectionLineId;
/**
 *  线路是否有位置
 *
 *  @param inspectionLineId 巡查路线Id
 *
 *  @return 结果
 */
- (BOOL)isExistLocationWithLineId:(NSInteger)inspectionLineId;
/**
 *  所有巡查设备
 *
 *  @param inspectionLineId 路线id
 *
 *  @return 巡查equipment模型数组
 */
- (NSArray*)allInspectionEquipmentWithLineId:(NSInteger)inspectionLineId;
/**
 *  所有巡查点
 *
 *  @param inspectionLineId 巡查路线id
 *
 *  @return 巡查location模型数组
 */
- (NSArray*)allInspectionLocationWithInspectionLineId:(NSInteger)inspectionLineId;
/**
 *  获取巡查点备注
 *
 *  @param locationId 位置
 *
 *  @return 巡查location模型数组
 */
- (NSArray*)inspectionLocationNoteWithLocationId:(NSInteger)locationId lineIds:(NSArray*)inspectionLineIdArray;
/**
 *  二维码下所有巡查的设备
 *
 *  @param inspectionLineId 路线id
 *
 *  @return 设备id数组
 */
- (NSArray*)allInspectionEquipmentWithLineId:(NSInteger)inspectionLineId qrcodeId:(NSString*)qrcodeId orLocationId:(NSInteger)locationId;
/**
 *  二维码下某种类型的要巡查设备
 *
 *  @param inspectionLineId 路线id
 *
 *  @return 设备id数组
 */
- (NSArray*)allInspectionEquipmentWithLineId:(NSInteger)inspectionLineId qrcodeId:(NSString*)qrcodeId equipmentTypeId:(NSInteger)equipmentTypeId;
/**
 *  保存巡查任务线路记录
 *
 *  @param inspectionLineRecords 路线记录数组
 *
 *  @return 结果
 */
- (BOOL)updateInspectionLineRecordWithArray:(NSArray*)inspectionLineRecords;

- (BOOL)updateInspectionLineRecordWithNewWorkData:(NSArray*)inspectionLineRecords;

/**
 *  保存巡查设备的记录
 *
 *  @param inspectionEquipmentRecords 设备记录数组
 *
 *  @return 结果
 */
- (BOOL)updateInspectionEquipmentRecordWithArray:(NSArray*)inspectionEquipmentRecords;
/**
 *  更新保存台账获取的位置巡查记录(不是全量字段更新)
 *
 *  @param locationInspectionRecords 位置巡查记录数组
 *
 *  @return 结果
 */
- (BOOL)updateLocationInspectionRecordWithArray:(NSArray*)locationInspectionRecords;
/**
 *  更新巡查设备的上传状态
 *
 *  @param uploadStatus 上传状态
 *
 *  @return 结果
 */
- (BOOL)updateInspectionEquipmentRecordUploadStatus:(NSInteger)uploadStatus inspectionEquipmentRecordId:(NSString*)recordId;
/**
 *  获取上传失败的巡查设备的记录
 *
 *  @return 结果
 */
- (NSArray*)inspectionEquipmentRecordsWithUploadStatusFailWithType:(NSInteger)type;
/**
 *  获取上传失败的巡查记录
 *
 *  @return 结果
 */
- (NSArray*)uploadFailedInspectionRecords;

/**
 *  不完整的，需要请求的路线数组
 *
 *  @return 只有id和updateTime的路线对象数组
 */
- (NSArray*)needRequestInspectionlLines;
/**
 *  保存巡更路线(不是完整的路线，只更新id和名字)
 *
 *  @param patrolLine 巡更路线模型
 *
 *  @return 结果
 */
- (BOOL)updateInspectionLineIdAndName:(YWInspectionLineModel*)inspectionLine;

@end
